Приемы уменьшения количества сбоев

Дмитрий Масленников, «Т-Банк»

Не защищаемся

Эффект от защиты может не стоить потраченных на нее денег

Например:

  • Защита от стихии и внешних техногенных факторов (потеря целых датацентров)
  • Защита от поломок оборудования

Если все-таки надо?

  1. Разрабатываем архитектуру такой, чтобы можно было обслуживать пользователей на части оборудования
  2. Делаем автоматическое и надежное детектирование проблем в зоне доступности / кластере / датацентре / на оборудовании
  3. Выводим сбойное оборудование при определении проблем

Сложности

  • Сильное усложнение архитектуры
  • Сложно определить проблему, особенно, если страдает только часть вызовов, или у нас изменились нефукционалные характеристики — например, время ответа системы
  • Можно выключить слишком много и навредить
  • Механизм может сломаться незаметно и не сработать в нужное время
  • Может вызывать каскадные проблемы

Достоинства

  • Дополнительно защищает от багов в релизах и ошибок при проведении работ
  • Быстрее реакции инженера

Баги в коде

Тестирование

До прода и в проде!

  • Unit-тестирование
  • Интеграционное тестирование
  • Нагрузочное тестирование
  • Стресс тестирование

Можно тестировать приложение после деплоя в прод до включения трафика

Ревью кода

  • Ревью членом команды перед принятием коммита
  • Парное программирование
  • Ревью экспертом по использованным технологиям

Более безопасные релизы

  • Использование канареек
  • Blue-green deployment
  • Rolling-update
  • Feature-toggle
  • Обеспечение возможности отката всех изменений

Другие возможности

  • Избавление от техдолга
  • Переписывание
  • Снижение скорости разработки (вплоть до замораживания)

Защита во время работ

  • Автоматизация
  • Дизайн безопасных интерфейсов
  • Безопасное подтверждение действий
  • Написание планов работ
  • Отработка действий

Защита от проблем в коммуникации

Встраивание документации

Уменьшение объемов документации

Удаление старой документации!

Целенаправленное обучение новых членов команды

Экзамен на знание после обучения

Уменьшение количества сообщений и писем

Уменьшение автоматически рассылаемой информации

Подтверждение получения важной информации

Переполнения

Что может переполниться?

  • Место на диске
  • Оперативная память
  • CPU
  • Сетевой канал
  • Файловые дескрипторы
  • Page cache
  • Доступные идентификаторы
  • Размер данных передаваемых через URL в браузере
  • Максимальное количество нод в кластере

Защита

  • Документирование (обучение разработчиков)
  • Мониторинг
  • Планирование ресурсов (стресс и нагрузочное тестирование)
  • Учить сервисы переходить на менее ресурсоемкие алгоритмы
  • Сброс трафика
  • Иметь запас ресурсов для вертикального масштабирования

Graceful Degradation

  • Уметь игнорировать все опциональные зависимости (тестирование!)
  • Уметь работать на закешированных данных
  • Уметь работать только в режиме на чтение
  • Уметь обслуживать только часть клиентов (сброс нагрузки)

Исправление проблем хаками

Исправление пролем хаками дает время для нормального исправления проблемы. Но приводит к соблазну не решать проблему более, оставляя хак навечно. Это приводит к обрастанию техдолгом. Требует особого внимания со стороны руководства.

Спасибо!

Вопросы?